﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web.ASPxUploadControl;
using System.IO;
using Aspose.Cells;

public partial class Reporte_DDJJ : System.Web.UI.Page
{
    const string UploadDirectory = "~/UploadControl/UploadImages/";

    //Los errores en el procesamiento se pondrán en la lista
    List<string> Errores = new List<string>();

    /////////////////////////////////////////////////////
    // PARAMETROS
    int _filaDeEncabezados = 2; //donde arranca Mes | Razon Social | etc.., se usa buscar los textos 
    // FIN PARAMETROS
    ///////////////////////////////////////////////////

    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void uplArchivo_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
    {
        string _ruta = SavePostedFile(e.UploadedFile);
        e.CallbackData = _ruta;

        //Proceso el archivo.
        ProcesarDDJJ(_ruta);
    }
    /// <summary>
    /// Guarda el archivo y devuelve la ruta con la dirección completa.
    /// </summary>
    /// <param name="uploadedFile"></param>
    /// <returns></returns>
    string SavePostedFile(UploadedFile uploadedFile)
    {
        string ret = "";
        if (uploadedFile.IsValid)
        {
            string _ruta = ObtenerRutaDDJJ();
            ret = _ruta + "\\" + uploadedFile.FileName.Replace(" ", "_"); ;//reemplazo espacios por guiones bajos            
            uploadedFile.SaveAs(ret);

        }
        return ret;
    }
    /// <summary>
    /// Obtiene la ruta donde estan las DDJJ
    /// </summary>
    /// <returns></returns>
    private string ObtenerRutaDDJJ()
    {
        string _carpeta = MapPath("~/Reportes/DDJJ");
        if (Directory.Exists(_carpeta) == false)
            Directory.CreateDirectory(_carpeta);
        
        return _carpeta;
    }

    private void ProcesarDDJJ(string pRuta)
    {
        //Errores = new List<string>();

        ////Abro el archivo 
        ////Instantiate a new workbook
        //Workbook workbook = new Workbook();

        ////Abro el archivo
        ////string path = System.Web.HttpContext.Current.Server.MapPath("~");
        ////path += Parametros.RutaPlantillaPresupuesto;
        //string path = pRuta;

        //workbook.Open(path);

        //// ///////////////////////////////////////
        //// Estilos
        //Aspose.Cells.Style _EstiloCeldaResaltada = workbook.Styles[workbook.Styles.Add()];
        //_EstiloCeldaResaltada.BackgroundColor = System.Drawing.Color.Red;
        ////
        //// ///////////////////////////////////////


        ////PROCESO HOJA "DDJJ JERARQUICO"
        //workbook = ProcesarDDJJ_Jerarquico(workbook);
        ////Get the first worksheet in the workbook
        ////Worksheet worksheet = workbook.Worksheets[0];
        //Worksheet worksheet = workbook.Worksheets.GetSheetByCodeName("DDJJ JERARQUICO");
        

        ////Get the cells collection in the sheet
        //Cells cells = worksheet.Cells;

        

        //#region Encabezado
        ////Datos de encabezado
        //cells[_NombrePresupuesto].PutValue(_presupuesto.ApellidoYNombre);
        //cells[_TelCelPresupuesto].PutValue(_presupuesto.CelularTelefono);
        //cells[_FechaCreadoPresupuesto].PutValue(_presupuesto.FechaHoraCreacionString);
        //cells[_SeguroPresupuesto].PutValue(_presupuesto.Aseguradora.RazonSocial);
        //cells[_MarcaPresupuesto].PutValue(_presupuesto.Marca);
        //cells[_ModeloPresupuesto].PutValue(_presupuesto.Modelo);
        //cells[_PatentePresupuesto].PutValue(_presupuesto.Patente);
        //cells[_AnoPresupuesto].PutValue(_presupuesto.AnoVehiculo);
        //#endregion

        //#region Pie

        //int _fila = _FilaUltimaTotales;
        //int _col = _ColumnaSegundaColumnaTotales;

        //if (_presupuesto.RepuestosACargoDeLaCompaniaDeSeguros == true)
        //{
        //    cells[_MensajeRepuestosAcargo].PutValue("Repuestos a cargo de la compañía aseguradora");
        //}

        //if (_presupuesto.OtrosOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.OtrosOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Otros:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.RepuestosOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.RepuestosOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Repuestos:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.ElectronicaOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.ElectronicaOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Electrónica:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.ElectricidadOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.ElectricidadOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Electricidad:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.CerrajeriaOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.CerrajeriaOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Cerrajería:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.TapiceriaOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.TapiceriaOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Tapicería:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}


        //if (_presupuesto.AireAcondicionadoOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.AireAcondicionadoOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Aire acondicionado:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.MecanicaTrenDelanteroOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.MecanicaTrenDelanteroOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Mecanica tren delantero:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;

        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}


        //if (_presupuesto.MecanicaOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.MecanicaOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Mecánica:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.DespegadoYPegadoDeCristalesOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.DespegadoYPegadoDeCristalesOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Desp. y pegado cristales:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.ReparacionPlasticosOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.ReparacionPlasticosOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Reparacion plásticos:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.DespegadoYPegadoDeMoldurasEInsigniasOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.DespegadoYPegadoDeMoldurasEInsigniasOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Desp. y peg. molduras:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.DesarmadoOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.DesarmadoOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Desarmado:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.ArmadoOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.ArmadoOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Armado:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.EnceradoOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.EnceradoOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Encerado:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.LustreOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.LustreOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Lustre:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.PinturaOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.PinturaOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Pintura:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //if (_presupuesto.ChaperiaOriginal > decimal.Zero)
        //{
        //    cells[_fila, _col].PutValue(_presupuesto.ChaperiaOriginalString);
        //    cells[_fila, _col].Style = _EstiloCeldasSubtotales;
        //    cells[_fila, _col - 2].PutValue("Chaperia:$");
        //    cells[_fila, _col - 2].Style.HorizontalAlignment = TextAlignmentType.Right;
        //    _fila = _fila - 1;
        //    if (_fila < _FilaPrimeraTotales)
        //    {//Hago el salto de columna si es necesario.
        //        _fila = _FilaUltimaTotales;
        //        _col = _ColumnaPrimeraColumnaTotales;
        //    }
        //}

        //cells[_TotalTexto].PutValue("TOTAL:$");
        //cells[_TotalNumero].Style.HorizontalAlignment = TextAlignmentType.Right;
        //cells[_TotalNumero].Style.Font.IsBold = true;
        //cells[_TotalNumero].PutValue(_presupuesto.TotalOriginalString);
        //cells[_TotalEnPalabrasExportar].PutValue("Son pesos: " + _presupuesto.TotalOriginalComoPalabras);

        //#endregion

        //#region Carga de elementos
        //int x = _ColumnaPrimeraColumna;
        //int y = _FilaPrimeraFila;

        //// Agrego todos los que son para reemplazar
        //ONElementoColeccion _elementos = _presupuesto.ElementosAReemplazar;
        //if (_elementos.Count > 0)
        //{
        //    cells[y, x].Style.Font.IsBold = true;
        //    cells[y, x].PutValue("REEMPLAZAR");
        //    y = y + 1;
        //    foreach (ONElemento _elemento in _elementos)
        //    {
        //        // Si llegue al final, tengo que saltar a la otra columna
        //        if (y > _FilaUltimaFila)
        //        {
        //            y = _FilaPrimeraFila;
        //            x = _ColumnaSegundaColumna;
        //        }
        //        cells[y, x].PutValue(_elemento.ItemParaReporte);
        //        y = y + 1;
        //    }
        //}

        //// Sacar y colocar
        //_elementos = _presupuesto.ElementosSacarColocar;
        //if (_elementos.Count > 0)
        //{
        //    y = y + 1;
        //    // Si llegue al final, tengo que saltar a la otra columna
        //    if (y > _FilaUltimaFila)
        //    {
        //        y = _FilaPrimeraFila;
        //        x = _ColumnaSegundaColumna;
        //    }
        //    cells[y, x].Style.Font.IsBold = true;
        //    cells[y, x].PutValue("SACAR Y COLOCAR");
        //    y = y + 1;
        //    foreach (ONElemento _elemento in _elementos)
        //    {
        //        //si llene todo, lo paro
        //        if ((y > _FilaUltimaFila)
        //            && (x == _ColumnaSegundaColumna))
        //            break;

        //        // Si llegue al final, tengo que saltar a la otra columna
        //        if (y > _FilaUltimaFila)
        //        {
        //            y = _FilaPrimeraFila;
        //            x = _ColumnaSegundaColumna;
        //        }

        //        cells[y, x].PutValue(_elemento.ItemParaReporte);
        //        y = y + 1;
        //    }
        //}

        //// Reparar
        //_elementos = _presupuesto.ElementosAReparar;
        //if (_elementos.Count > 0)
        //{
        //    y = y + 1;
        //    // Si llegue al final, tengo que saltar a la otra columna
        //    if (y > _FilaUltimaFila)
        //    {
        //        y = _FilaPrimeraFila;
        //        x = _ColumnaSegundaColumna;
        //    }
        //    cells[y, x].Style.Font.IsBold = true;
        //    cells[y, x].PutValue("REPARAR");
        //    y = y + 1;
        //    foreach (ONElemento _elemento in _elementos)
        //    {
        //        //si llene todo, lo paro
        //        if ((y > _FilaUltimaFila)
        //            && (x == _ColumnaSegundaColumna))
        //            break;

        //        // Si llegue al final, tengo que saltar a la otra columna
        //        if (y > _FilaUltimaFila)
        //        {
        //            y = _FilaPrimeraFila;
        //            x = _ColumnaSegundaColumna;
        //        }

        //        //string _cadena = (_elemento.Item + "-" + _elemento.SubGrupo.Trim() + "-" + _elemento.Grupo.Trim()).Replace("--","-");
        //        cells[y, x].PutValue(_elemento.ItemParaReporte);
        //        y = y + 1;
        //    }
        //}

        //// Controlar
        //_elementos = _presupuesto.ElementosAControlar;
        //if (_elementos.Count > 0)
        //{
        //    y = y + 1;
        //    // Si llegue al final, tengo que saltar a la otra columna
        //    if (y > _FilaUltimaFila)
        //    {
        //        y = _FilaPrimeraFila;
        //        x = _ColumnaSegundaColumna;
        //    }
        //    cells[y, x].Style.Font.IsBold = true;
        //    cells[y, x].PutValue("CONTROLAR");
        //    y = y + 1;
        //    foreach (ONElemento _elemento in _elementos)
        //    {
        //        //si llene todo, lo paro
        //        if ((y > _FilaUltimaFila)
        //            && (x == _ColumnaSegundaColumna))
        //            break;

        //        // Si llegue al final, tengo que saltar a la otra columna
        //        if (y > _FilaUltimaFila)
        //        {
        //            y = _FilaPrimeraFila;
        //            x = _ColumnaSegundaColumna;
        //        }

        //        //string _cadena = (_elemento.Item + "-" + _elemento.SubGrupo.Trim() + "-" + _elemento.Grupo.Trim()).Replace("--", "-");
        //        cells[y, x].PutValue(_elemento.ItemParaReporte);
        //        y = y + 1;
        //    }
        //}

        //_elementos = _presupuesto.ElementosAPintar;
        //if (_elementos.Count > 0)
        //{
        //    y = y + 1;
        //    // Si llegue al final, tengo que saltar a la otra columna
        //    if (y > _FilaUltimaFila)
        //    {
        //        y = _FilaPrimeraFila;
        //        x = _ColumnaSegundaColumna;
        //    }
        //    cells[y, x].Style.Font.IsBold = true;
        //    cells[y, x].PutValue("PINTAR");
        //    y = y + 1;
        //    foreach (ONElemento _elemento in _elementos)
        //    {
        //        //si llene todo, lo paro
        //        if ((y > _FilaUltimaFila)
        //            && (x == _ColumnaSegundaColumna))
        //            break;

        //        // Si llegue al final, tengo que saltar a la otra columna
        //        if (y > _FilaUltimaFila)
        //        {
        //            y = _FilaPrimeraFila;
        //            x = _ColumnaSegundaColumna;
        //        }

        //        //string _cadena = (_elemento.Item + "-" + _elemento.SubGrupo.Trim() + "-" + _elemento.Grupo.Trim()).Replace("--", "-");
        //        cells[y, x].PutValue(_elemento.ItemParaReporte);
        //        y = y + 1;
        //    }
        //}

        //#endregion

        ////Save the excel file


        //string pNombreArchivo = _presupuesto.Patente + "-" + _presupuesto.Modelo + "-" + _presupuesto.Apellido + "-PRE.xls";
        //pNombreArchivo = pNombreArchivo.Replace(char.Parse("/"), char.Parse("-")).Replace(char.Parse("\\"), char.Parse("-"));
        //pNombreArchivo = pNombreArchivo.Replace(" ", "");
        //pNombreArchivo = pNombreArchivo.Replace("--", "-");
        //workbook.Save(this.Request.PhysicalApplicationPath + "Archivos\\" + pNombreArchivo);
        //workbook = null;
        //string _ruta = this.Request.ApplicationPath + "/Archivos/" + pNombreArchivo;

        ////guardo la hora de la ultima generación para que cuando envie el archivo en forma automatica, no lo envie muchas veces seguidas.
        //Session["UltimoArchivoEnviadoFechaHora"] = DateTime.Now;
        //Response.Redirect(_ruta, false);
    }
    /// <summary>
    /// Procesa la hoja de jerarquicos.
    /// </summary>
    /// <param name="pWorkBook"></param>
    /// <returns></returns>
    private Workbook ProcesarDDJJ_Jerarquico(Workbook pWorkBook)
    {
        Worksheet _hoja = pWorkBook.Worksheets.GetSheetByCodeName("DDJJ JERARQUICO");
        if (_hoja == null)
        {
            Errores.Add("La hoja 'DDJJ JERARQUICO' no se encontró, verifique el archivo");
            return pWorkBook;
        }

        //Obtngo las celdas
        Cells _celdas = _hoja.Cells;

        //Repito por cada fila
        for (int _fila = ObtenerPrimerFilaConDatos(_celdas); _fila <= ObtenerUltimaFilaConDatos(_celdas); _fila = _fila + 1)
        {
            //_celdas = ProcesarFila(_celdas, _fila);
        }
        return null;

    }
    #region Metodos de soporte para generar reporte
    private Row Procesarfila(Cells pCeldas, int pFila)
    {
        int _columnaPrimerDia = ObtenerColumnaPrimerDia(pCeldas);
        //int _columnaUltimoDia = ObtenerColumnaUltimoDia(pCeldas);
        for (int _dia = 1; _dia <= 31; _dia++)
        {

        }
        return null;
    }
    /// <summary>
    /// Obtiene la primer fila que contiene una fecha en la columna A, si no existe ninguna, devuelve -1
    /// </summary>
    /// <param name="pCeldas"></param>
    /// <returns>Devuelve la fila en la que esta la primer fecha. -1 si no encuentra.</returns>
    private int ObtenerPrimerFilaConDatos(Cells pCeldas)
    {
        DateTime _fecha;
        for (int i = 0; i <= 20; i++)
        {
            if (DateTime.TryParse(pCeldas[i, 0].StringValue, out _fecha) == true)
                return i;
        }

        return -1;
    }
    /// <summary>
    /// Obtiene la ultima fila con datos en las celdas.
    /// </summary>
    /// <param name="pCeldas"></param>
    /// <returns>-1 si no encuentra fechas</returns>
    private int ObtenerUltimaFilaConDatos(Cells pCeldas)
    {
        int _ultimaFilaConDatos = -1; //verificado que sea una fecha en la primer columna
        DateTime _fecha;

        for(int i = 0;i < pCeldas.Count; i++)
        {
            if (DateTime.TryParse(pCeldas[i, 0].StringValue, out _fecha) == true)
                _ultimaFilaConDatos = i;
        }
        return _ultimaFilaConDatos;
    }
    private int ObtenerColumnaPrimerDia(Cells pCeldas)
    {
        int _columnaPrimerDia = -1;
        for (int i = 0; i < pCeldas.Columns.Count; i++)
        {
            if (int.TryParse(pCeldas[_filaDeEncabezados, i].StringValue, out _columnaPrimerDia) == true)
                return _columnaPrimerDia;
        }
        return _columnaPrimerDia; //devuelve -1 ya que no encontro el primer dia.
    }
    #endregion
}